package com.hb.core.pojo.center.au.dto;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;

/**
 * 中招互联用户信息
 *
 * @author ljs
 *
 */
@Setter
@Getter
@ApiModel(value="ZappUserDTO", description="注册接口使用的DTO，主要是中招扫码返回的信，和账号密码信息")
public class ZappUserDTO implements Serializable {

    @ApiModelProperty(value = "id")
    private String id;
    /**
     * 接口类型
     */
    @ApiModelProperty(value = "接口类型--中招返回")
    private String type;
    /**
     * 证书类型
     * 00 sm2
     * 01 RSA
     */
    @ApiModelProperty(value = "证书类型-00:sm2, 01:RSA ")
    private String algorithmType;
    /**
     * TId
     */
    @ApiModelProperty(value = "中招返回tid")
    private String TId;
    /**
     * 无身份扫码签章使用
     */
    @ApiModelProperty(value = "中招返回pid")
    private String pId;
    /**
     * 使用状态00未使用01已使用
     */
    private String useStatus;
    /**
     * 签名流程（01 RSA标准流程, 02 SM2短流程, 03 SM2标准流程）
     */
    @ApiModelProperty(value = "签名流程（01 RSA标准流程, 02 SM2短流程, 03 SM2标准流程）")
    private String flowType;
    /**
     * 机构交易码
     */
    @ApiModelProperty(value = "机构交易码")
    private String unifiedTransactionCode;
    /**
     * 个人交易码
     */
    @ApiModelProperty(value = "个人交易码")
    private String personalTransactionCode;
    /**
     * 交易码状态01正常02作废03冻结
     */
    private String sharedCodeStatus;
    /**
     * 证书所属类型
     * 01个人
     * 02机构"
     */
    @ApiModelProperty(value = "证书所属类型 01：个人， 02：机构")
    private String certBelongType;
    /**
     * 创建时间
     */
    @ApiModelProperty(value = "创建时间")
    @JsonFormat(shape= JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    /**
     * CA证书序列号
     */
    @ApiModelProperty(value = "CA证书序列号")
    private String certSn;

    @ApiModelProperty(value = "CA类型")
    private String caType;
    /**
     * CA机构编码
     */
    @ApiModelProperty(value = "CA机构编码")
    private String caOrgType;


    /**
     * 签名原值
     */
    @ApiModelProperty(value = "签名原值")
    private String signOriVal;

    /**
     * 签名值
     */
    @ApiModelProperty(value = "签名值")
    private String signatureValue;

    /**
     * 公钥
     */
    @ApiModelProperty(value = "签名值")
    private String pubCert;

    /**
     * 算法 RSA/SM2
     */
    @ApiModelProperty(value = "算法 RSA/SM2")
    private String algorithm;

    /**
     * 登录令牌
     */
    @ApiModelProperty(value = "登录令牌")
    private String accessToken;

    @ApiModelProperty(value = "令牌")
    private String tradingPlatformAccessToken;

    /**
     * 登录类型 01个人 02机构
     */
    @ApiModelProperty(value = "登录类型 01个人 02机构")
    private String loginUserType;

    /**
     * 业务角色
     */
    @ApiModelProperty(value = "业务角色2:招标人  3：投标人")
    private Integer roleSign;


    /* ===================== 用户相关字段 start ===================== */
    /**
     * 用户姓名
     */
    @ApiModelProperty(value = "用户姓名", required = true)
    private String personName;
    /**
     * 身份证号
     */
    @ApiModelProperty(value = "身份证号")
    private String idCard;
    /**
     * 手机号码
     */
    @ApiModelProperty(value = "手机号码", required = true)
    private String telephoneNum;
    /**
     * 机构管理员手机号
     */
    @ApiModelProperty(value = "机构管理员手机号")
    private String managerTelephoneNum;
    /**
     * 用户名
     */
    @ApiModelProperty(value = "用户名", required = true)
    private String userName;
    /**
     * 密码
     */
    @ApiModelProperty(value = "密码", required = true)
    private String password;

    @ApiModelProperty(value = "加密盐")
    private String saltSource;


    /* ===================== 企业相关字段 start ===================== */
    /**
     * 法定代表人姓名
     */
    @ApiModelProperty(value = "法定代表人姓名")
    private String legalRepresent;
    /**
     * 法定代表人身份证
     */
    @ApiModelProperty(value = "法定代表人身份证")
    private String legalIDCard;
    /**
     * 组织机构代码
     */
    @ApiModelProperty(value = "组织机构代码", required = true)
    private String legalCode;
    /**
     * 机构名称
     */
    @ApiModelProperty(value = "机构名称", required = true)
    private String legalName;
    @ApiModelProperty(value = "是否是绑定快捷登录接口1：快捷登录，3：认证企业", required = true)
    private Integer fastLoginFlag;

    /**
     * 获取系统用户信息
     *
     * @return
     */
    public UserDTO getUser() {
        // 用户实体信息
        UserDTO user = new UserDTO();
        user.setFullName(personName);
        user.setPassword(password);
        user.setPhone(telephoneNum);
        user.setSaltSource(saltSource);
        user.setIdNum(idCard);

        user.setUsername(userName);

        // 用户状态
        user.setUserStatus(1);

        user.setBackInfo(JSONUtil.toJsonStr(this));

        return user;
    }

    /**
     * 获取企业信息
     *
     * @return
     */
    public OrgDTO getOrg() {
        // 企业实体信息
        OrgDTO org = new OrgDTO();
        org.setParentId(0L);
        org.setOrgName(legalName);
        org.setCreditCode(legalCode);
        org.setContactPhone(managerTelephoneNum);
        org.setLegalName(legalRepresent);
        org.setCertificateType("01");
        org.setCertificateNumber(legalIDCard);

        return org;
    }
}
